package com.wande.dataplatform.filecollection.controller;

import com.wande.common.core.domain.R;
import com.wande.common.mybatis.core.page.TableDataInfo;
import com.wande.common.satoken.utils.LoginHelper;
import com.wande.common.web.core.BaseController;
import com.wande.dataplatform.filecollection.domain.bo.CollectionErrorQuery;
import com.wande.dataplatform.filecollection.domain.bo.FileRecordQuery;
import com.wande.dataplatform.filecollection.domain.vo.CollectionErrorVo;
import com.wande.dataplatform.filecollection.domain.vo.FileRecordVo;
import com.wande.dataplatform.filecollection.service.ICollectionErrorService;
import com.wande.dataplatform.filecollection.service.IFileRecordService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * 采集历史控制器
 *
 * @author wande
 */
@Validated
@RestController
@RequestMapping("/dataplatform/file-collection/history")
@RequiredArgsConstructor
public class CollectionHistoryController extends BaseController {

    private final IFileRecordService fileRecordService;
    private final ICollectionErrorService collectionErrorService;

    /**
     * 查询文件记录列表
     *
     * @param query 查询条件
     * @return 文件记录列表
     */
    @GetMapping("/file-records")
    public TableDataInfo<FileRecordVo> listFileRecords(FileRecordQuery query) {
        return fileRecordService.listFileRecords(query);
    }

    /**
     * 查询文件记录详情
     *
     * @param id 文件记录ID
     * @return 文件记录详情
     */
    @GetMapping("/file-records/{id}")
    public R<FileRecordVo> getFileRecordDetail(@PathVariable Long id) {
        return R.ok(fileRecordService.getFileRecordDetail(id));
    }

    /**
     * 预览文件数据
     *
     * @param id 文件记录ID
     * @param limit 预览行数限制(默认100)
     * @return 预览数据
     */
    @GetMapping("/file-records/{id}/preview")
    public R<Map<String, Object>> previewFileData(
        @PathVariable Long id,
        @RequestParam(required = false, defaultValue = "100") Integer limit) {
        return R.ok(fileRecordService.previewFileData(id, limit));
    }

    /**
     * 下载原始文件
     *
     * @param id 文件记录ID
     * @return 文件下载URL
     */
    @GetMapping("/file-records/{id}/download")
    public R<String> downloadFile(@PathVariable Long id) {
        return R.ok(fileRecordService.downloadFile(id));
    }

    /**
     * 获取文件采集统计
     *
     * @param query 查询条件
     * @return 统计数据
     */
    @GetMapping("/file-records/statistics")
    public R<Map<String, Object>> getFileStatistics(FileRecordQuery query) {
        return R.ok(fileRecordService.getFileStatistics(query));
    }

    /**
     * 查询错误记录列表
     *
     * @param query 查询条件
     * @return 错误记录列表
     */
    @GetMapping("/errors")
    public TableDataInfo<CollectionErrorVo> listErrors(CollectionErrorQuery query) {
        return collectionErrorService.listErrors(query);
    }

    /**
     * 查询错误记录详情
     *
     * @param id 错误记录ID
     * @return 错误记录详情
     */
    @GetMapping("/errors/{id}")
    public R<CollectionErrorVo> getErrorDetail(@PathVariable Long id) {
        return R.ok(collectionErrorService.getErrorDetail(id));
    }

    /**
     * 获取错误统计
     *
     * @param query 查询条件
     * @return 统计数据
     */
    @GetMapping("/errors/statistics")
    public R<Map<String, Object>> getErrorStatistics(CollectionErrorQuery query) {
        return R.ok(collectionErrorService.getErrorStatistics(query));
    }
}
